home *** CD-ROM | disk | FTP | other *** search
- ;----------------------------------------------------------------
- ;テキスト画面のクリア
-
- .include doscall.mac
- .include iocscall.mac
-
- ;----------------------------------------------------------------
- ;ラスタコピーマクロ
- ;<an.l:$00E88001に固定してあるアドレスレジスタ
- ;<dn.w:ソースラスタブロック番号*$0100+デスティネーションラスタブロック番号が
- ; 入っているレジスタ
- ;<sn.w:srを保存してあるレジスタ
- RASCPY .macro an,dn,sn
- @_1: tst.b (a0) ;水平帰線期間を待つ
- bmi @_1
- ori.w #$0700,sr ;割り込み禁止
- @_2: tst.b (a0) ;水平表示期間を待つ
- bpl @_2
- move.w dn,($00E8002C-$00E88001,an) ;ラスタブロック番号を設定
- move.w #8,($00E80480-$00E88001,an) ;ラスタコピー実行
- move.w sn,sr ;割り込み許可
- .endm
-
- ;----------------------------------------------------------------
- ;ラスタコピー終了マクロ
- ;<an.l:$00E88001に固定してあるアドレスレジスタ
- RASEND .macro an
- @_1: tst.b (a0) ;水平帰線期間を待つ
- bmi @_1
- @_2: tst.b (a0) ;水平表示期間を待つ
- bpl @_2
- move.w #$0000,($00E80480-$00E88001,a0) ;ラスタコピー終了(clrは避ける)
- .endm
-
- ;----------------------------------------------------------------
- ;----------------------------------------------------------------
- ;メインルーチン
-
- ;スーパーバイザモードへ移行
- clr.l -(sp)
- DOS _SUPER
- move.l d0,(sp)
-
- ;カーソル消去
- IOCS _B_CUROFF
-
- move.w $00E8002A,-(sp)
-
- ;ラスタブロック255をクリア
- move.w #$0130,$00E8002A ;プレーン0,1同時アクセス
- moveq.l #0,d0
- .irp %r,d1,d2,d3,d4,d5,d6
- move.l d0,%r
- .endm
- .irp %r,a0,a1,a2,a3,a4,a5
- movea.l d0,%r
- .endm
- lea.l $00E20000,a6
- .rept 9
- movem.l d0-d6/a0-a5,-(a6)
- .endm
- movem.l d0-d6/a0-a3,-(a6)
-
- ;1ラスタブロックずつコピー
- lea.l $00E88001,a0 ;$00E88001に固定
- move.w #$0001,d2 ;ラスタブロック番号の増分
- move.w #%0011,($00E8002A-$00E88001,a0) ;ラスタコピープレーンセレクト
- move.w sr,d3 ;srを保存
- move.w #$FF00,d0 ;ラスタブロック255→0,…,255→127
- moveq.l #128-1,d1
- 1: RASCPY a0,d0,d3
- add.w d2,d0
- dbra d1,1b
- RASEND a0
-
- move.w (sp)+,$00E8002A
-
- ;カーソル表示
- IOCS _B_CURON
-
- ;ユーザモードに復帰
- DOS _SUPER
- addq.l #4,sp
-
- ;終了
- DOS _EXIT
-